package com.monlyu.util;

import java.util.Date;
import java.util.List;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang.BooleanUtils;

import com.monlyu.bo.EnumsBo;
import com.monlyu.listener.InitDataListener;
import com.monlyu.vo.Enums;

/**
 * 对Bean的一些操作<br>
 * 可参考 <code>http://commons.apache.org/beanutils/</code> <br>
 * 扩展类
 * 
 * @author monlyu
 */
public class BeanUtil {

	/**
	 * 设置属性
	 * 
	 * @since 2009-12-28
	 * 
	 *        update 2010-02-14s
	 */
	public static void setProperty(Object bean, String name, Object value) {
		if (StringUtil.isNotEmpty(value)) {
			try {
				Class<?> clazz = ClassUtil.getFiledType(bean, name);
				if (clazz != null) {
					// if (ClassUtil.isInDefVoPackage(clazz)) {
					// return;
					// }
					if (RegexUtil.isDate(value.toString())) {
						if (clazz.equals(Date.class) || clazz.equals(java.sql.Date.class)) {
							BeanUtils.setProperty(bean, name, DateUtil.parse(value.toString(), DateUtil.DATE_PATTERN));
							return;
						}
					}
					if (RegexUtil.isDateTime(value.toString())) {
						if (clazz.equals(Date.class) || clazz.equals(java.sql.Date.class)) {
							BeanUtils.setProperty(bean, name, DateUtil.parse(value.toString(),
									DateUtil.DATETIME_PATTERN));
							return;
						}
					}
					if (RegexUtil.isBol(value.toString())) {
						BeanUtils.setProperty(bean, name, BooleanUtils.toBoolean(value.toString()));
						return;
					}
					BeanUtils.setProperty(bean, name, value);
				}
			} catch (Exception e) {
				LogUtil.log(BeanUtil.class, e).error("设置属性异常:" + e);
			}
		}
	}

	/**
	 * 从数据库中查找信息出来
	 * 
	 * @author monlyu
	 * @since 2010-1-30
	 */
	public static List<Enums> getValues(String enumType) {
		EnumsBo enumsBo = (EnumsBo) InitDataListener.getBeanById("enumsBo");
		return enumsBo.getEnumsNoDisable(enumType);
	}

	/**
	 * 
	 * @param value
	 *            获取显示的值
	 * @author monlyu
	 * @since 2010-1-31
	 */
	public static Object getEnumKey(Long value) {
		EnumsBo enumsBo = (EnumsBo) InitDataListener.getBeanById("enumsBo");
		return enumsBo.getEnumValue(value);
	}
}
